﻿using UnityEngine;
using UnityEngine.UI;
using UnityEngine.EventSystems;

public class 摇杆 : MonoBehaviour, IDragHandler, IPointerUpHandler, IPointerDownHandler
{
    private Image 摇杆背景图片;
    private Image 摇杆图片;

    public Vector3 输入方向;
    public float X方向的输入;
    public float Y方向的输入;

    void Start()
    {

        摇杆背景图片 = GetComponent<Image>();
        摇杆图片 = transform.GetChild(0).GetComponent<Image>(); //this command is used because there is only one child in hierarchy
        输入方向 = Vector3.zero;
    }

    public void OnDrag(PointerEventData 指针事件数据)
    {
        //获取输入方向
        RectTransformUtility.ScreenPointToLocalPointInRectangle(
            摇杆背景图片.rectTransform,
            指针事件数据.position,
            指针事件数据.pressEventCamera,
            out Vector2 位置
        );

        Vector2 摇杆背景图片大小 = new Vector2(
            摇杆背景图片.rectTransform.sizeDelta.x,
            摇杆背景图片.rectTransform.sizeDelta.y
        );

        // Unity 不支持以下定义方式
        // Vector2 摇杆背景图片大小 = new(
        //     摇杆背景图片.rectTransform.sizeDelta.x,
        //     摇杆背景图片.rectTransform.sizeDelta.y
        // );

        位置.x /= 摇杆背景图片大小.x;
        位置.y /= 摇杆背景图片大小.y;

        Debug.Log("(" + 位置.x + "," + 位置.y + ")");


        // 注意：要把摇杆背景的轴心设置为 1 
        float x = (摇杆背景图片.rectTransform.pivot.x == 1f) ? 位置.x * 2 + 1 : 位置.x * 2 - 1;
        float y = (摇杆背景图片.rectTransform.pivot.y == 1f) ? 位置.y * 2 + 1 : 位置.y * 2 - 1;

        输入方向 = new Vector3(x, y, 0);
        输入方向 = (输入方向.magnitude > 1) ? 输入方向.normalized : 输入方向;

        //限定Joystick能移动的区域
        摇杆图片.rectTransform.anchoredPosition = new Vector3(输入方向.x * (摇杆背景图片.rectTransform.sizeDelta.x / 3)
                                                               , 输入方向.y * (摇杆背景图片.rectTransform.sizeDelta.y) / 3);

        X方向的输入 = 输入方向.x;
        Y方向的输入 = 输入方向.y;
    }

    public void OnPointerDown(PointerEventData 指针事件数据)
    {
        OnDrag(指针事件数据);
    }

    public void OnPointerUp(PointerEventData 指针事件数据)
    {
        输入方向 = Vector3.zero;

        X方向的输入 = 输入方向.x;
        Y方向的输入 = 输入方向.y;

        摇杆图片.rectTransform.anchoredPosition = Vector3.zero;
    }
}
